/*
	Интерполирование сплайнами
*/

#pragma once

typedef struct
{
	double arg_a;
	double arg_b;
	double arg_c;
	double arg_d;
	double arg_x;

} sinpol_tup_t;

typedef struct
{
	double *vals_x;				/* Значения X */
	double *vals_y;				/* Значения Y */
	int sinpol_degr;			/* Количество узлов сетки */
	sinpol_tup_t *splines;		/* Коэффициенты сплайна */

} sinpol_t;

#define SINPOL_TUP_T_SZ sizeof(sinpol_tup_t)
#define SINPOL_T_SZ sizeof(sinpol_t)

/* Создание объекта полинома */
sinpol_t *sinpol_new(const int);

/* Удаление объекта полинома */
void sinpol_destroy(sinpol_t *);

/* Генерирование исходных данных */
void sinpol_gen_data(sinpol_t *, double, double, double (*) (const double));

/* Построение сплайна */
void sinpol_build(sinpol_t *);

/* Вычисление значения в точке */
double sinpol_get_val(const sinpol_t *, const double);